package com.example.consumer;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

public class Consumer_PubSub2 {
    public static void main(String[] args) throws IOException, TimeoutException {
        //        1. 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
//        2. 设置参数
        connectionFactory.setHost("192.168.254.129");
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/myHost");
        connectionFactory.setUsername("h790864074");
        connectionFactory.setPassword("h13834968356");
//        3. 获取连接
        Connection connection = connectionFactory.newConnection();
//        4. 创建Channel
        Channel channel = connection.createChannel();
//        5. 创建一个队列
//        queue 队列名
//        durable 是否持久化--当mq重启后队列时候还在
//        exclusive: 是否独占
//        autoDelete: 当没有Consumer 是否自动删除
//        arguments:参数
        channel.queueDeclare("test_fanout_queue", true, false, false, null);
        channel.queueDeclare("test_fanout_queue2", true, false, false, null);
//        6. 从队列中获取消息
        Consumer consumer = new DefaultConsumer(channel){
//            回调方法 当受到消息后执行的方法
//            1。 consumerTag:标识
//            2. envelope: 获取一些信息，jc
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//                System.out.println(consumerTag);
//                System.out.println(envelope);
//                System.out.println(properties);
                System.out.println("body:"+new String(body,StandardCharsets.UTF_8));
                System.out.println("将日志信息保存到数据库");
            }
        };
        channel.basicConsume("test_fanout_queue2", true, consumer);


//        释放资源? 消费者不要去关闭资源

    }
}
